import request from "@/utils/request";
import {ServiceEnum} from "@/enums/ServiceEnum";

const DICT_BASE_URL = "/"+ServiceEnum.PublicService;


class DictAPI {
  /**
   * 获取字典分页列表
   *
   * @param queryParams 查询参数
   * @returns 字典分页结果
   */
  static getPage(queryParams: DictPageQuery) {
    return request<any, PageResult<DictVO[]>>({
      url: `${DICT_BASE_URL}/sysDict/admin/listPageDict`,
      method: "post",
      data: queryParams,
    });
  }

  /**
   * 获取字典表单数据
   *
   * @param id 字典ID
   * @returns 字典表单数据
   */
  static getDictById(id: number) {
    return request<any, ResponseData<DictForm>>({
      url: `${DICT_BASE_URL}/sysDict/admin/getDetailById`,
      method: "get",
      params:{id}
    });
  }

  /**
   * 新增字典
   *
   * @param data 字典表单数据
   */
  static add(data: DictForm) {
    return request({
      url: `${DICT_BASE_URL}/sysDict/admin/add`,
      method: "post",
      data: data,
    });
  }

  /**
   * 修改字典
   *
   * @param data 字典表单数据
   */
  static update(data: DictForm) {
    return request({
      url: `${DICT_BASE_URL}/sysDict/admin/update`,
      method: "post",
      data: data,
    });
  }

  /**
   * 删除字典
   *
   * @param id 字典ID，多个以英文逗号(,)分隔
   */
  static deleteById(id: number) {
    return request({
      url: `${DICT_BASE_URL}/sysDict/admin/del`,
      method: "get",
      params:{id}
    });
  }


  /**
   * 获取字典的数据项
   *
   * @param dictCode 字典编码
   * @returns 字典数据项
   */
  static getOptions(dictCode: string) {
    return new Promise<OptionType[]>((resolve,reject)=>
    {
      request<any, DictItem[]>({
        url: `${DICT_BASE_URL}/sysDict/open/getDictDataByDictCode`,
        method: "get",
        params: { dictCode }
      }).then(data=>{
       let  re=data.map(dataItem=>{
          let opt:OptionType={value:dataItem.value,label:dataItem.label,disable:dataItem.status==1?0:1};
          return opt;
          });
        resolve(re);
      })
        .catch(err=>{
          reject(err);
        })
    })
  }

  static getList() {
    let queryParams:DictPageQuery={pageNum:1,pageSize:1000};
    return request<any, PageResult<DictVO[]>>({
      url: `${DICT_BASE_URL}/sysDict/admin/listPageDict`,
      method: "post",
      data: queryParams,
    });
  }


}



export default DictAPI;

/**
 * 字典查询参数
 */
export interface DictPageQuery extends PageQuery {
  /**
   * 关键字(字典名称/编码)
   */
  dictName?: string;
}

/**
 * 字典分页对象
 */
export interface DictVO {
  /**
   * 字典ID
   */
  id: number;
  /**
   * 字典名称
   */
  name: string;
  /**
   * 字典编码
   */
  dictCode: string;
  /**
   * 字典状态（1-启用，0-禁用）
   */
  status: number;
  /**
   * 字典项列表
   */
  dictItems: DictItem[];
}

/**
 * 字典项
 */
export interface DictItem {
  /**
   * 字典项ID
   */
  id?: number;
  /**
   * 字典项名称
   */
  label?: string;
  /**
   * 字典项值
   */
  value?: string;

  /**
   * 标签类型
   */
  tagType?:string;
  /**
   * 排序
   */
  sort?: number;
  /**
   * 状态（1-启用，0-禁用）
   */
  status?: number;
}

// TypeScript 类型声明

/**
 * 字典
 */
export interface DictForm {
  /**
   * 字典ID
   */
  id?: number;
  /**
   * 字典名称
   */
  name?: string;
  /**
   * 字典编码
   */
  dictCode?: string;
  /**
   * 字典状态（1-启用，0-禁用）
   */
  status?: number;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 字典数据项列表
   */
  dictItems?: DictItem[];
}
